package com.xinruke.hostels.reservation.controller;

import com.xinruke.hostels.common.controller.BaseController;
import com.xinruke.hostels.common.vo.ResultVO;
import com.xinruke.hostels.common.vo.query.RowsDataVO;
import com.xinruke.hostels.reservation.user.interfaces.dto.BlacklistQueryDTO;
import com.xinruke.hostels.reservation.user.interfaces.dto.BlacklistQueryResultDTO;
import com.xinruke.hostels.reservation.interfaces.dto.ReservationContactsListQueryDTO;
import com.xinruke.hostels.reservation.service.PersonalService;
import com.xinruke.hostels.reservation.user.interfaces.dto.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * @author GuoZheng
 * @ClassName PersonalController
 * @date：2019/6/13
 * @version: V1.0.0
 * @description：个人中心
 */
@RestController
@RequestMapping("/personal")
@Api(tags = "个人中心")
public class PersonalController extends BaseController {

    @Resource
    private PersonalService personalService;

    /**
     * 添加常用联系人
     */
    @PostMapping("/contacts/add")
    @ApiOperation("添加常用联系人")
    public ResultVO addContacts(@Valid @RequestBody ContactsAddInfoDto params) {
        return personalService.addContacts(params);
    }

    /**
     * 查看常用联系人
     *
     * @return
     */
    @PostMapping("/contacts")
    @ApiOperation("查看当前用户的常用联系人列表")
    public ResultVO<RowsDataVO<ContactsInfo>> contactsList(@Valid @RequestBody ReservationContactsListQueryDTO contactsListQueryDto) {
        return personalService.contactsList(contactsListQueryDto);
    }

    /**
     * 修改常用联系人手机号
     */
    @PostMapping("/contacts/phone")
    @ApiOperation("修改常用联系人手机号")
    public ResultVO updateContacts(@Valid @RequestBody ContactsUpdateDto params) {
        return personalService.updateContacts(params);
    }

    /**
     * 修改个人信息
     * 可以修改个人的联系方式、职级待遇、所属大单位。
     */
    @PostMapping("/update")
    @ApiOperation("修改个人信息")
    public ResultVO update(@Valid @RequestBody PersonalUpdateDto params) {
        return personalService.update(params);
    }

    /**
     * 删除常用联系人
     * 1. 判断联系人添加的时间是否超过一年，
     * 1.1超过一年则提示“您确定要删除选中的常用联系人吗？”确定则删除；
     * 1.2如果添加的时间没有超过一年则提示“当前联系人无法删除！”
     * todo 删除使用@DeleteMapping
     */
    @PostMapping("/contacts/del")
    @ApiOperation("删除常用联系人")
    public ResultVO delContacts(@Valid @RequestBody ContactsDelDto params) {
        return personalService.delContacts(params);
    }


    /**
     * 查看常用联系人详情
     */
    @PostMapping("/contacts/detail")
    @ApiOperation("详情")
    public ResultVO<ContactsDetailResultDto> contactDetail(@Valid @RequestBody ContactsDetailQueryDTO queryDTO) {
        return personalService.contactdetail(queryDTO);
    }

    @PostMapping("/isBlacklist")
    @ApiOperation("判断用户是否为黑名单用户")
    public ResultVO<BlacklistQueryResultDTO> isBlacklist(@Valid @RequestBody BlacklistQueryDTO blacklistQueryDTO){
        return personalService.isBlacklist(blacklistQueryDTO);
    }


}
